OPC Studio User's Guide and Reference
Server Object Operations And Notifications
Concepts > OPC Wizard Concepts > OPC Wizard Operation Model > Server Object Operations And Notifications
In This Topic

When implementing an OPC server with the OPC Wizard consists, your code needs to perform the following basic steps:

  1. Create an instance of the server object - the EasyUAServer Class.
  2. Define properties of the server (such as its endpoint address), and its contents (the nodes and their behavior). For more information, see OPC Wizard Data Model.
  3. Control the server operations - start it, let it run, and eventually stop it. This is described further below.

The properties and the contents of the server object must be defined before the server is started.

Starting and Stopping the Server

The OPC server is started by calling the Start Method. The server must not already be started at that moment. This method initializes the server operations, sets up its address space, and initiates listening on the configured endpoints for client connections.

The Start Method operates asynchronously. The server may not yet be ready to accept client connections on all its endpoints when this method completes.

After you call the Start Method, let the server run for as long as needed.

The OPC server is stopped by calling the Stop Method. The server must be running (started) at that moment. This method stops the server operations, initiates disconnecting any existing client connections and ceasing to listen on the configured endpoints. This method performs a graceful shutdown of the server, ensuring that resources are properly released and that clients are notified of the disconnection.

The Stop Method operates asynchronously. The server may not yet have disconnected all client connections on all its endpoints when this method completes.

The following example illustrates how to start and stop the OPC server.

.NET

// This example shows how to create an OPC UA server with a single data variable, start and stop it.
// You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using System;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;

namespace UAServerDocExamples._EasyUAServer
{
    class Start_Stop
    {
        public static void Main1()
        {
            // Instantiate the server object.
            // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            var server = new EasyUAServer();

            // Define a data variable providing random integers.
            var random = new Random();
            server.Add(new UADataVariable("MyDataVariable").ReadValueFunction(() => random.Next()));

            // Start the server.
            Console.WriteLine("The server is starting...");
            server.Start();

            Console.WriteLine("The server is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...");
            Console.ReadLine();

            // Stop the server.
            Console.WriteLine("The server is stopping...");
            server.Stop();

            Console.WriteLine("The server is stopped.");
        }
    }
}
' This example shows how to create an OPC UA server with a single data variable, start and stop it.
' You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.

Imports System
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.NodeSpace

Namespace _EasyUAServer
    Partial Friend Class Start_Stop
        Shared Sub Main1()
            ' Instantiate the server object.
            ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            Dim server = New EasyUAServer()

            ' Define a data variable providing random integers.
            Dim random = New Random()
            server.Add(New UADataVariable("MyDataVariable").ReadValueFunction(Function() random.Next()))

            ' Start the server.
            Console.WriteLine("The server is starting...")
            server.Start()

            Console.WriteLine("The server is started.")
            Console.WriteLine()

            ' Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...")
            Console.ReadLine()

            ' Stop the server.
            Console.WriteLine("The server is stopping...")
            server.Stop()

            Console.WriteLine("The server is stopped.")
        End Sub
    End Class
End Namespace

Server State Notifications

The server object raises the Starting Event when the component is starting, and it raises the Stopped Event when the component has stopped.

These notifications are also broadcast to all server nodes, and can be handled on any server node too.

Example: Examples - Server OPC UA - React to server starting and stopping in push model

Endpoint State Notifications

The server object implements the IEasyUAServerEndpointMonitoring Interface, and provides notification about the state of its endpoints via the EndpointStateChanged Event. For more information, see OPC Wizard Operation Monitoring Services.

The following example illustrates how to receive notifications about endpoint state changes.

.NET

// This example shows how to obtain notifications about the changes in the state of the endpoints that server exposes.
// You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using System;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;
using OpcLabs.EasyOpc.UA.OperationModel;

namespace UAServerDocExamples._EasyUAServer
{
    class EndpointStateChanged
    {
        public static void Main1()
        {
            // Instantiate the server object.
            // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            var server = new EasyUAServer();

            // Define a data variable providing random integers.
            var random = new Random();
            server.Add(new UADataVariable("MyDataVariable").ReadValueFunction(() => random.Next()));

            // Hook events.
            server.EndpointStateChanged += ServerOnEndpointStateChanged;

            // Start the server.
            Console.WriteLine("The server is starting...");
            server.Start();

            Console.WriteLine("The server is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...");
            Console.ReadLine();

            // Stop the server.
            Console.WriteLine("The server is stopping...");
            server.Stop();

            Console.WriteLine("The server is stopped.");
        }

        // Event handler for the EndpointStateChanged event. It simply prints out the event.
        private static void ServerOnEndpointStateChanged(object sender, EasyUAServerEndpointStateChangedEventArgs e)
        {
            Console.WriteLine(e);

            // Following are some useful properties in the event notification:
            //   e.EndpointUrlString
            //   e.ConnectionState
            //   e.Exception
            //   e.Succeeded
        }
    }
}
' This example shows how to obtain notifications about the changes in the state of the endpoints that server exposes.
' You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.

Imports System
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.NodeSpace
Imports OpcLabs.EasyOpc.UA.OperationModel

Namespace _EasyUAServer
    Partial Friend Class EndpointStateChanged
        Shared Sub Main1()
            ' Instantiate the server object.
            ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            Dim server = New EasyUAServer()

            ' Define a data variable providing random integers.
            Dim random = New Random()
            server.Add(New UADataVariable("MyDataVariable").ReadValueFunction(Function() random.Next()))

            ' Hook events.
            AddHandler server.EndpointStateChanged, AddressOf ServerOnEndpointStateChanged

            ' Start the server.
            Console.WriteLine("The server is starting...")
            server.Start()

            Console.WriteLine("The server is started.")
            Console.WriteLine()

            ' Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...")
            Console.ReadLine()

            ' Stop the server.
            Console.WriteLine("The server is stopping...")
            server.Stop()

            Console.WriteLine("The server is stopped.")
        End Sub

        ' Event handler for the EndpointStateChanged event. It simply prints out the event.
        Private Shared Sub ServerOnEndpointStateChanged(ByVal sender As Object, ByVal e As EasyUAServerEndpointStateChangedEventArgs)
            Console.WriteLine(e)

            ' Following are some useful properties in the event notification:
            '   e.EndpointUrlString
            '   e.ConnectionState
            '   e.Exception
            '   e.Succeeded
        End Sub
    End Class
End Namespace
See Also

Fundamentals

Reference

Examples - Server OPC Unified Architecture